package es.nadalgoyo.frikiquest.bbdd.tablas;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import es.nadalgoyo.frikiquest.excel.TemasExcel;
import es.nadalgoyo.frikiquest.vo.TemaVO;
import es.sergionadal.mvc.bbdd.tablas.Tabla;
import es.sergionadal.mvc.vo.CampoVO;

public class TablaTemas extends Tabla {

	public static final String NOMBRE = "nombre";

	private TemasExcel excel;

	public TablaTemas() {
		super("frikitemas");
	}

	@Override
	protected List<CampoVO> getCamposChild() {
		List<CampoVO> campos = new ArrayList<CampoVO>();
		campos.add(getId());
		campos.add(new CampoVO(NOMBRE, CampoVO.TEXT));
		return campos;
	}

	@Override
	public long insert(SQLiteDatabase db) {
		ContentValues nuevoRegistro = new ContentValues();
		long result = -1;
		for (TemaVO tema : excel.getTemas()) {
			nuevoRegistro.put(ID, tema.getId());
			nuevoRegistro.put(NOMBRE, tema.getNombre());
			result = db.insertWithOnConflict(getName(), null, nuevoRegistro,
					SQLiteDatabase.CONFLICT_REPLACE);
			if (result == -1)
				return result;
		}
		return result;
	}

	@Override
	public void update(SQLiteDatabase db, String[] args) {
		ContentValues valores = new ContentValues();
		for (TemaVO tema : excel.getTemas()) {
			valores.put(NOMBRE, tema.getNombre());
			db.update(getName(), valores, getParameterField(ID), args);
		}
	}

	public void setTemasExcel(TemasExcel excel) {
		this.excel = excel;
	}

	public List<TemaVO> getTemaConcurrencia(SQLiteDatabase db) {
		StringBuffer sb = new StringBuffer();
		String namePregunta = new TablaPreguntas().getName();
		sb.append("SELECT ".concat(getName()).concat(".*"));
		sb.append(" FROM ".concat(getName()).concat(", ").concat(namePregunta));
		sb.append(" WHERE ".concat(TablaPreguntas.CONCURRENCIA).concat(" =( "));
		sb.append("SELECT MIN(".concat(TablaPreguntas.CONCURRENCIA)
				.concat(") "));
		sb.append("FROM ".concat(namePregunta).concat(" "));
		sb.append(") AND ");
		sb.append(getName().concat(".").concat(ID).concat(" = ")
				.concat(namePregunta).concat(".")
				.concat(TablaPreguntas.ID_TEMA));
		sb.append(" GROUP BY ".concat(getName()).concat(".").concat(NOMBRE));

		return getListTemas(db.rawQuery(sb.toString(), null));
	}

	public List<TemaVO> getTemas(SQLiteDatabase db) {
		return getListTemas(getAll(db));
	}

	public TemaVO getTema(SQLiteDatabase db, String id) {
		Cursor cursor = getRegistroPerID(db, id);
		TemaVO tema = null;
		if (cursor.moveToFirst() && !cursor.moveToNext()) {
			tema = new TemaVO(cursor.getString(1), cursor.getString(2));
		}

		if (cursor != null && !cursor.isClosed()) {
			cursor.close();
		}
		return tema;
	}

	private List<TemaVO> getListTemas(Cursor cursor) {
		List<TemaVO> temas = new ArrayList<TemaVO>();

		if (cursor.moveToFirst()) {
			do {
				temas.add(new TemaVO(cursor.getString(0), cursor.getString(1)));
			} while (cursor.moveToNext());
		}

		if (cursor != null && !cursor.isClosed()) {
			cursor.close();
		}
		return temas;
	}
}
